<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>编程式导航</title>
</head>

<body>
  <div id="app">
    <!-- 会生成历史记录 -->
    <h1>声明式路由</h1>
    <router-link to="/login">登录组件</router-link>
    <router-link to="/register">注册组件</router-link>
    <router-link to="/user">用户组件</router-link>
    <router-link to="/emp">员工组件</router-link>
    <!-- 不会生成历史记录,把员工里历史记录替换掉了 -->
    <router-link to="/dept" replace>部门组件</router-link>
    <h1>编程式路由</h1>
    <button type="button" @click="doredirect('login')">去跳转,去重定向,登录组件</button>
    <button type="button" @click="doredirect('register')">注册组件</button>
    <button type="button" @click="doredirect('user')">用户组件</button>
    <button type="button" @click="doredirect('emp')">员工组件</button>
    <button type="button" @click="doreplace('dept')">部门组件</button>
    <br><br>
    <!-- 模拟浏览器的前进和后退 -->
    <button type="button" @click="doBack()">后退</button>
    <button type="button" @click="doForward()">前进</button>
    <hr>
    <router-view></router-view>
  </div>
  <script src="../js/vue.js"></script>
  <script src="../js/vue-router.js"></script>
  <script>
    // 定义组件
    let Login = {
      template: `<h2>我是登录组件</h2>`
    }
    let Register = {
      template: `<h2>我是注册组件</h2>`
    }
    let User = {
      template: `<h2>我是用户组件</h2>`
    }
    let Emp = {
      template: `<h2>我是员工组件</h2>`
    }
    let Dept = {
      template: `<h2>我是部门组件</h2>`
    }

    // 定义路由列表
    let routes = [{
        path: '/login',
        component: Login
      },
      {
        path: '/register',
        component: Register
      },
      {
        path: '/user',
        component: User
      },
      {
        path: '/emp',
        component: Emp
      },
      {
        path: '/dept',
        component: Dept
      }
    ]

    // 定义路由器
    let router = new VueRouter({
      routes
    })

    // 创建Vue实例
    const vm = new Vue({
      el: '#app',
      data: {

      },
      methods: { //传递过来一个字符串
        doredirect(str) {
          // 方式一最简单用法 
          // this.$router.push('/'+str)
          // 方式二：对象写法。使用最多的方法，可以传递参数这些。
          this.$router.push({
            path: '/' + str//push会产生历史记录
            // 可以添加很多配置项
          })
        },
        doreplace(str) {//replace替换当前路由，不会产生历史记录
          this.$router.replace({
            // 用途：在实现登录之后，导航到主页面，使用replace比较方便，不能回退
            path: '/' + str
          })
        },
        doBack() {
          this.$router.go(-1)
        },
        doForward() {
          this.$router.go(1)
        }
      },
      router
    })
  </script>
</body>

</html>

